package com.corpgovernment.common.apollo;

import com.ctrip.corp.obt.generic.utils.JsonUtils;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.google.common.collect.Lists;
import com.ctrip.corp.obt.generic.utils.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @author ：llw
 * @date ：Created in 2020/7/3 19:55
 * @description： Order-Center项目的Apollo配置
 * @modified By：
 * @version: $
 */
@Service
public class OrderCenterApollo extends CommonApollo {

    /**
     * 行程统计开始日期
     */
    @Value("${orderAggregatesDayBefore:35}")
    private int orderAggregatesDayBefore;
    /**
     * 行程统计截止日期
     */
    @Value("${orderAggregatesDayAfter:70}")
    private int orderAggregatesDayAfter;

    /**
     * 验证码失效时间 单位:分钟
     */
    @Value("${msg_time_out:5}")
    private int msgTimeOut;

	/**
	 * 混付创退款单模式 （1：自己计算 2：去供应商详情）
	 */
	@Value("${max_pay_create_refund_bill_model:1}")
	private int maxPayCreateRefundBillModel;

    /**
     * app公共订单入口
     */
    public List<Integer> getMineOrderList() {
        return Optional.ofNullable(getAppProperty("mineOrderList", ""))
                .filter(StringUtils::isNotBlank)
                .map(e -> e.split(","))
                .map(e -> Arrays.stream(e).map(Integer::valueOf).collect(Collectors.toList()))
                .orElse(Lists.newArrayList());
    }

    /**
     * 产线后处理能够处理的类型全集
     */
    public String[] getHandlerOrderOperateList() {
        return Optional.ofNullable(getAppProperty("handlerOrderOperateList", ""))
                .filter(StringUtils::isNotBlank)
                .map(e -> e.split(","))
                .orElse(new String[0]);
    }

    /**
     * 获取短信是否发送
     *
     * @return
     */
    public static boolean getZtSmsSend() {
        Config config = ConfigService.getAppConfig();
        return config.getBooleanProperty("zt.sms.send", true);
    }
    /**
     * 行程统计开始日期
     */
    public int getOrderAggregatesDayBefore() {
        return Integer.parseInt(getAppProperty("orderAggregatesDayBefore", "35"));
    }
    /**
     * 行程统计截止日期
     */
    public int getOrderAggregatesDayAfter() {
        return Integer.parseInt(getAppProperty("orderAggregatesDayAfter", "70"));
    }
    /**
     * 验证码失效时间 单位:分钟
     */
    public long getMsgTimeOut() {
        return Integer.parseInt(getAppProperty("msgTimeOut", "5"));
    }
    /**
     * 混付创退款单模式 （1：自己计算 2：去供应商详情）
     */
	public int getMaxPayCreateRefundBillModel() {
        return Integer.parseInt(getAppProperty("max_pay_create_refund_bill_model", "1"));
	}

    /**
     * 租户级配置是否展示因私订单[key=租户，value=是否开启] 默认true
     *
     * @param tenantId 租户
     * @return true 表示展示 false表示不展示
     */
    public Boolean getDisplayPrivateOrders(String tenantId) {
        String jsonConfig = getAppProperty("display.private.orders", "{}");
        Map<String, Boolean> configMap = JsonUtils.parseMap(jsonConfig);
        return configMap.getOrDefault(tenantId, Boolean.TRUE);
    }

}
